package com.wx.core.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.wx.core.service.MenuService;
import com.wx.pojo.AccessToken;
import com.wx.pojo.Button;
import com.wx.pojo.CommonButton;
import com.wx.pojo.ComplexButton;
import com.wx.pojo.Menu;
import com.wx.util.WeixinUtil;

import dwz.business.menu.MenuServiceMgr;
import dwz.persistence.beans.WechatMenu;
import dwz.persistence.mapper.WechatMenuMapper;
import dwz.web.management.MenuController;

@Service("menuService")
public class MenuServiceImpl implements MenuService{
	private static Logger log = LoggerFactory.getLogger(MenuServiceImpl.class);
	@Resource
	private WechatMenuMapper menuMapper;

	/**
	 * 创建菜单服务
	 * @param appId 第三方用户唯一凭证
	 * @param appSecret 第三方用户唯一凭证密钥
	 * @return
	 */
	public Integer createMenu(String appId, String appSecret) {
		log.info("进入=======MenuController.createMenu====");
		log.info("appId="+appId);
		log.info("appSecret="+appSecret);
		// 调用接口获取access_token
		AccessToken at = WeixinUtil.getAccessToken(appId, appSecret);
		if (null != at) {
			log.info("accessToken="+at.getToken());
			// 调用接口创建菜单
			int result = WeixinUtil.createMenu(getMenu(), at.getToken());
			// 判断菜单创建结果
			return result;
		}
		return null;
	}
	
	/**
	 * 删除菜单服务
	 * @param appId 第三方用户唯一凭证
	 * @param appSecret 第三方用户唯一凭证密钥
	 * @return
	 */
	public Integer deleteMenu(String appId, String appSecret) {
		// 调用接口获取access_token
		AccessToken at = WeixinUtil.getAccessToken(appId, appSecret);
		if (null != at) {
			// 调用接口删除菜单
			int result = WeixinUtil.deleteMenu(at.getToken());
			// 判断菜单创建结果
			return result;
		}
		return null;
	}
	
	/**
	 * 组装菜单数据
	 * 
	 * @return
	 */
	public Menu getMenu() {
		Button [] butten=new Button[3];
		//查询一级菜单信息
		List<WechatMenu> list= menuMapper.findMenuByParentCode("0");
		if(list!=null&&list.size()>0){
			int len=3;	
			if(list.size()<3){
				len=list.size();
		    }
			for (int i = 0; i < len; i++) {
				WechatMenu menu=list.get(i);
				Button [] commonBtn=null;
				//根据菜单code查询二级菜单信息
				List<WechatMenu> secondlist=menuMapper.findMenuByParentCode(menu.getCode());
				if(secondlist!=null){
					commonBtn=new CommonButton[secondlist.size()];
					for (int j = 0; j < secondlist.size(); j++) {
						WechatMenu smenu=secondlist.get(j);
						CommonButton btn= new CommonButton();
						btn.setName(smenu.getName());
						btn.setType(smenu.getEventName());
						btn.setKey(smenu.getKeyName());
						commonBtn[j]=btn;
					}
				}
				
				ComplexButton mainBtn = new ComplexButton();
				mainBtn.setName(menu.getName());
				mainBtn.setSub_button(commonBtn);
				butten[i]=mainBtn;
			}
		}

		/**
		 * 这是公众号xiaoqrobot目前的菜单结构，每个一级菜单都有二级菜单项<br>
		 * 
		 * 在某个一级菜单下没有二级菜单的情况，menu该如何定义呢？<br>
		 * 比如，第三个一级菜单项不是“更多体验”，而直接是“幽默笑话”，那么menu应该这样定义：<br>
		 * menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 });
		 */
		Menu menu = new Menu();
		menu.setButton(butten);
		return menu;
	}
}
